指针
var x,y,z=7,8,9
var p1 [3]*int = [3]*int{&x,&y,&z}
fmt.Println(p1)
var testatty = [3]int{1,4,6}
var p2 *[3]int = &testatty
fmt.Println(p2)
结构体
type 类型名 struct {
字段名 字段类型
字段名 字段类型
…
}
type Person struct {
name string
age int
hobby []string
}
func main() {
var person Person
fmt.Println(person)
hobby1 :=make([]string,3,4)
hobby2 := append(hobby1, "nanqiu")
var person1 Person=Person{"hector",19, hobby1}
var person2 Person=Person{name: "hector",age: 19, hobby: hobby2}
fmt.Println(person2)
fmt.Println(person1)
}
person2.name = "bili"
person1.hobby[0] = "足球"
fmt.Println(person1.name)
fmt.Println(person2)
s := struct {
name string
age int
}{name: "sary", age: 19}
fmt.Println(s.age)
type Animal struct {
int
string
}
var anmail Animal = Animal{1,"dog"}
var anmail1 Animal = Animal{int:1,string:"dog"}
fmt.Println(anmail1, anmail)
}
type Zhong struct {
name string
}
type Dog struct {
name string
age int
zhong Zhong
qian struct{
salary float32
}
}
var dog2 = Dog{name:"shagou", age:3, zhong:Zhong{"tianyuanquan"}}
dog2.qian.salary = 12.9
fmt.Println(dog1.zhong.name)
dog2.zhong.name = "dubing"
fmt.Println(dog2)
type Zhong struct {
name string
price float32
}
type Dog struct {
name string
age int
Zhong
}
var dog1 = Dog{name: "xiaonaigou", age:12, Zhong:Zhong{name: "hashiqi", price: 129.01}}
fmt.Println(dog1.Zhong.name)
fmt.Println(dog1.price)
方法
type Personal struct {
name string
age int
}
func (person Personal)PrintName() {
fmt.Println(person.name)
}
func main() {
var personal = Personal{"bili", 19}
personal.PrintName()
}
type Personal struct {
name string
age int
}
func (person Personal)PrintName() {
fmt.Println(person.name)
}
func (person Personal)Editname(name string) {
person.name =name
}
func (person *Personal)EditName1(name string) {
person.name = name
}
func main() {
var personal = Personal{"bili", 19}
var personal1 = Personal{"bili", 19}
personal.PrintName()
personal.Editname("hector")
personal1.EditName1("hector")
fmt.Println(personal)
fmt.Println(personal1)
}
func main() {
animal := Animal{name: "dog", age: 2, Hobby:Hobby{hobbyid: 1, hobbyname: "wannib"}}
fmt.Println(animal.hobbyname)
animal.ShowAnimal()
animal.Prihobby()
}
type Hobby struct {
hobbyid int
hobbyname string
}
func (hobby Hobby)Prihobby() {
fmt.Println("此爱好是%s", hobby.hobbyname)
}
type Animal struct {
name string
age int
Hobby
}
func (anl Animal)ShowAnimal() {
fmt.Println("动物的名字%s",anl.name)
}
func Editname2(person *Personal, name string) {
person.name = name
}
type Personal struct {
name string
age int
}
func (person *Personal)EditName1(name string) {
person.name = name
}
var personal1 = Personal{"bili", 19}
var peind *Personal = &personal1
personal.PrintName()
Editname2(peind, "sary")
personal1.EditName1("lu")
type Myint int8
func (i *Myint)add() {
(*i) ++
}
结构体取代类
package day03
import "fmt"
type Personal struct {
Name string
Age int
Hobby []string
}
func New(name string, age int, hobby []string) Personal {
person := Personal{Name:name, Age:age, Hobby: hobby}
return person
}
func init() {
fmt.Println("调用此包会自动执行init函数")
}
hobby := make([]string,3 ,4)
res :=day03.New("hector", 19, hobby)
fmt.Println(res)
接口
type Duck interface {
speak(str string)
}
type Tduck struct {
name string
age int
}
type Pduck struct {
name string
age int
}
func (t Tduck)speak(str string) {
fmt.Println("这是Tduck的speak:%s", str)
}
func (p Pduck) speak(str string) {
fmt.Println("这是Pduck的speak:%s", str)
}
func main() {
var tduck = Tduck{name: "tdy",age: 12}
var pduck = Tduck{name: "pdy",age: 10}
var duck Duck
var duck1 Duck
duck=tduck
duck1=pduck
duck.speak("yayaya")
duck1.speak("aaaaa")
}
package main
import "fmt"
type Speak interface {
say()
}
type RDuck struct {
}
func (r RDuck)say() {
fmt.Println("RDuck说出的话")
}
type BDuck struct {
}
func (B BDuck)say() {
fmt.Println("BDuck说出的话")
}
func animalSay(speak Speak) {
speak.say()
}
func main() {
r :=RDuck{}
b :=BDuck{}
animalSay(r)
animalSay(b)
}
func test1(a Animal) {
dog, ok :=a.(Dog)
if ok{
fmt.Println(dog.Name)
fmt.Println(dog.Lookhome)
} else {
fmt.Println("断言失败不是Dog类型")
}
}
func main() {
dog :=Dog{Name: "旺财", Age: 1}
cat :=Cat{Name: "小咪", Age: 2}
var animal1 Animal
var animal2 Animal
animal1=dog
animal2=cat
test1(animal1)
test1(animal2)
}
func test(i interface{}) {
switch obj:=i.(type){
case Dog:
obj.Lookhome()
case Cat:
fmt.Println("断言传入接口的是Cat类型")
case string:
fmt.Println("传入接口的是String类型")
case int:
fmt.Println("传入接口的是int类型")
default:
fmt.Println("未断言出类型")
}
}
func main() {
dog :=Dog{Name: "旺财", Age: 1}
cat :=Cat{Name: "小咪", Age: 2}
var animal1 Animal
var animal2 Animal
animal1=dog
animal2=cat
test(animal1)
test(animal2)
}