goweb-go言語の基礎
3665 ワード
go言語の基礎
この本はgowebを话すのですが、やはりgo言语の基础は一回过ぎて、私は前にすでにgo言语の基础に対して1回の系統的な学习をしたため、ここで简単に振り返って、もう多すぎる笔记を书かないで、前の书くブログはすべて基础知识があって、O(∩∩)Oははは~
Goは生まれながらにしてUTF-8をサポートしており、任意の文字を直接出力することができ、UTF-8の任意の文字を識別子として使用することもできます.
Goはpackage(Pythonのモジュールと同様)を使用してコードを整理する.main.main()関数(この関数はプライマリパッケージにあります)は、各独立した実行可能プログラムのエントリポイントです.GoはUTF-8文字列と識別子(UTF-8の発明者であるGoの発明者の1人であるため)を使用するため、生まれながらにして多言語をサポートする
Comma-ok断言
Go言語には文法があり、このタイプの変数であるかどうかを直接判断することができます:value,ok=element.(T)、ここでvalueは変数の値であり、okはboolタイプであり、elementはinterface変数であり、Tは断言のタイプである.
elementにTタイプの数値が確かに格納されている場合、okはtrueを返し、そうでない場合falseを返します.
はんしゃ
Go言語は反射を実現し,反射とはプログラムの実行時の状態をチェックできることである.私たちが一般的に使っているパッケージはreflectパッケージです.どのようにreflectパッケージを運用するか、公式のこの文章はreflectパッケージの実現原理を詳しく説明して、laws of reflection
reflectは一般的に3つのステップに分かれていますが、反射するには1つのタイプの値(これらの値はすべて空interfaceを実現しています)であり、まずreflectオブジェクト(reflect.Typeまたはreflect.Valueに変換し、状況に応じて異なる関数数を呼び出す必要があります)に変換する必要があります.この2つの取得方法は次のとおりです.
reflectオブジェクトに変換すると、reflectオブジェクトを対応する値に変換することができます.たとえば、
反射値を取得すると、対応するタイプと数値が返されます.
最後に、反射すると、反射するフィールドは修正可能でなければなりません.私たちは前に伝達値と伝達参照を学んだことがあります.これも同じ理屈です.反射するフィールドは読み書き可能でなければなりません.次のように書くと、エラーが発生します.
適切な値を変更するには、このように書く必要があります.
上は反射の簡単な紹介だけで、もっと深い理解は自分でプログラミングの中で絶えず実践する必要があります.
varとconstは2.2 Go言語の基礎の中の変数と定数を参照してpackageとimportがすでに短い接触funcを持っていることを明らかにして関数と方法returnを定義して関数からdeferを返すために類似した構造関数goを返して同時selectで異なるタイプの通信interfaceを選択してインタフェースを定義して、2.6小節structを参照して抽象データ型を定義して、2.5節break、case、continue、for、fallthrough、else、if、switch、goto、defaultの2.3の流れを参照してください.chanはchannel通信typeに使用されます.カスタムタイプmapを宣言するために使用されます.mapタイプデータrangeを宣言するために使用されます.slice、map、channelの数を読み取るために使用されます.上記の25のキーワードによって覚えているように、Goもほとんど覚えていません.
全体的にこの章はよく書かれていますが、注釈は最後にスレッドと協程に関連するときに少し愚かで、この方面に対する接触が少ない原因です.
アドレス
この本はgowebを话すのですが、やはりgo言语の基础は一回过ぎて、私は前にすでにgo言语の基础に対して1回の系統的な学习をしたため、ここで简単に振り返って、もう多すぎる笔记を书かないで、前の书くブログはすべて基础知识があって、O(∩∩)Oははは~
Goは生まれながらにしてUTF-8をサポートしており、任意の文字を直接出力することができ、UTF-8の任意の文字を識別子として使用することもできます.
Goはpackage(Pythonのモジュールと同様)を使用してコードを整理する.main.main()関数(この関数はプライマリパッケージにあります)は、各独立した実行可能プログラムのエントリポイントです.GoはUTF-8文字列と識別子(UTF-8の発明者であるGoの発明者の1人であるため)を使用するため、生まれながらにして多言語をサポートする
Comma-ok断言
Go言語には文法があり、このタイプの変数であるかどうかを直接判断することができます:value,ok=element.(T)、ここでvalueは変数の値であり、okはboolタイプであり、elementはinterface変数であり、Tは断言のタイプである.
elementにTタイプの数値が確かに格納されている場合、okはtrueを返し、そうでない場合falseを返します.
package main
import (
"fmt"
"strconv"
)
type Element interface{}
type List [] Element
type Person struct {
name string
age int
}
// String , fmt.Stringer
func (p Person) String() string {
return "(name: " + p.name + " - age: "+strconv.Itoa(p.age)+ " years)"
}
func main() {
list := make(List, 3)
list[0] = 1 // an int
list[1] = "Hello" // a string
list[2] = Person{"Dennis", 70}
for index, element := range list {
if value, ok := element.(int); ok {
fmt.Printf("list[%d] is an int and its value is %d
", index, value)
} else if value, ok := element.(string); ok {
fmt.Printf("list[%d] is a string and its value is %s
", index, value)
} else if value, ok := element.(Person); ok {
fmt.Printf("list[%d] is a Person and its value is %s
", index, value)
} else {
fmt.Printf("list[%d] is of a different type
", index)
}
}
}
はんしゃ
Go言語は反射を実現し,反射とはプログラムの実行時の状態をチェックできることである.私たちが一般的に使っているパッケージはreflectパッケージです.どのようにreflectパッケージを運用するか、公式のこの文章はreflectパッケージの実現原理を詳しく説明して、laws of reflection
reflectは一般的に3つのステップに分かれていますが、反射するには1つのタイプの値(これらの値はすべて空interfaceを実現しています)であり、まずreflectオブジェクト(reflect.Typeまたはreflect.Valueに変換し、状況に応じて異なる関数数を呼び出す必要があります)に変換する必要があります.この2つの取得方法は次のとおりです.
t := reflect.TypeOf(i) // , t
v := reflect.ValueOf(i) // , v ,
reflectオブジェクトに変換すると、reflectオブジェクトを対応する値に変換することができます.たとえば、
tag := t.Elem().Field(0).Tag // struct
name := v.Elem().Field(0).String() //
反射値を取得すると、対応するタイプと数値が返されます.
var x float64 = 3.4
v := reflect.ValueOf(x)
fmt.Println("type:", v.Type())
fmt.Println("kind is float64:", v.Kind() == reflect.Float64)
fmt.Println("value:", v.Float())
最後に、反射すると、反射するフィールドは修正可能でなければなりません.私たちは前に伝達値と伝達参照を学んだことがあります.これも同じ理屈です.反射するフィールドは読み書き可能でなければなりません.次のように書くと、エラーが発生します.
var x float64 = 3.4
v := reflect.ValueOf(x)
v.SetFloat(7.1)
適切な値を変更するには、このように書く必要があります.
var x float64 = 3.4
p := reflect.ValueOf(&x)
v := p.Elem()
v.SetFloat(7.1)
上は反射の簡単な紹介だけで、もっと深い理解は自分でプログラミングの中で絶えず実践する必要があります.
varとconstは2.2 Go言語の基礎の中の変数と定数を参照してpackageとimportがすでに短い接触funcを持っていることを明らかにして関数と方法returnを定義して関数からdeferを返すために類似した構造関数goを返して同時selectで異なるタイプの通信interfaceを選択してインタフェースを定義して、2.6小節structを参照して抽象データ型を定義して、2.5節break、case、continue、for、fallthrough、else、if、switch、goto、defaultの2.3の流れを参照してください.chanはchannel通信typeに使用されます.カスタムタイプmapを宣言するために使用されます.mapタイプデータrangeを宣言するために使用されます.slice、map、channelの数を読み取るために使用されます.上記の25のキーワードによって覚えているように、Goもほとんど覚えていません.
全体的にこの章はよく書かれていますが、注釈は最後にスレッドと協程に関連するときに少し愚かで、この方面に対する接触が少ない原因です.
アドレス