Golang学習(コードで学ぶ)-第二編

6154 ワード

type Circle struct {
	radius float64
	desc   string
}

//          
func (c Circle) getArea() float64 {
	return 3.14 * c.radius * c.radius
}

//                ,       ,         
func (c *Circle) setRadius(val float64) {
	c.radius = val
}

//        ,     Circle      ,     
func (c Circle) setRadiusFake(val float64) {
	c.radius = val
}

/*
    ,             ,  go       
*/
func method_test() {
	print_start_seperator("method_test");
	var cir Circle;
	cir.radius = 12;
	fmt.Printf("circle's area:%f 
", cir.getArea()) cir.setRadius(10) fmt.Printf("after real setRadius[%f] circle's area:%f
", cir.radius, cir.getArea()) cir.setRadiusFake(20) fmt.Printf("after fake setRadius[%f] circle's area:%f
", cir.radius, cir.getArea()) print_end_seperator(); } /** , , go */ func slice_func(arr []int) { for idx, val := range arr { fmt.Printf("[slice_func]idx:%d val:%d \t", idx, val) } fmt.Println("") } /** , , go */ func arr_func(arr [5]int) { for idx, val := range arr { fmt.Printf("[arr_func]idx:%d val:%d \t", idx, val) } fmt.Println("") } /** array , , */ func change_arr(arr [5]int, val int) { for idx, _ := range arr { arr[idx] = val * 10 } } /** , , , go , , ,go : type Slice struct{ arr *int size int cap int } */ func change_slice(arr []int, val int) { for idx, _ := range arr { arr[idx] = val * 10 } } /** , */ func print_arr(arr [5]int) { for _, val := range arr { fmt.Printf("%d\t", val) } fmt.Println("") } /** , */ func print_slice(arr []int) { if nil == arr { return } for _, val := range arr { fmt.Printf("%d\t", val) } fmt.Println("") } /** , */ func print_slice_str(arr []string) { if nil == arr { return } for _, val := range arr { fmt.Printf("%s\t", val) } fmt.Println("") } /* , go , 。 */ func array_slice_test() { print_start_seperator("array_slice_test") arr := []int{5, 4, 3, 2, 1} slice_func(arr) // //arr_func(arr) arr2 := [5]int{10, 9, 8, 7, 6} //slice_func(arr2) arr_func(arr2) // , , 0 var arr3 [5]int for _, val := range arr3 { fmt.Printf("val:%d \t", val) } fmt.Println() // , , go , arr3 nil,for var arr4 []int for _, val := range arr4 { fmt.Printf("%d", val) fmt.Println("I am not executed!!!!") } if nil == arr4 { fmt.Println("arr4 is a nil!!!!!!!!!!!!!") } // var arr5 [5]int = [5]int{0, 0, 0, 0, 0} change_arr(arr5, 15) fmt.Println("After changing the array...") print_arr(arr5) /** , go , , ,go : type Slice struct{ arr *int size int cap int } */ var arr6 []int = []int{0, 0, 0, 0, 0, 0, 0} change_slice(arr6, 15) fmt.Println("After changing the slice...") print_slice(arr6) // var arr7 = [5]string{"one", "two", "three", "four", "five"} slice1 := arr7[:] print_slice_str(slice1) slice1 = arr7[1:3] print_slice_str(slice1) //slice , slice1[0] = "new_two" fmt.Printf("After assign to slice. arr7:%s slice1:%s
", arr7, slice1) //After assign to slice. arr7:[one two new_two four five] slice1:[two new_two] // ? arr7[1] = "newer_two" // , , fmt.Printf("After assign to origin arr. arr7:%s slice1:%s
", arr7, slice1) //After assign to origin arr. arr7:[one newer_two three four five] slice1:[newer_two three] // size, capacity var slice2 = make([]int, 3, 10) fmt.Printf("slice2. size:%d cap:%d
", len(slice2), cap(slice2)) // append slice , , slice2 = append(slice2, 1) slice2 = append(slice2, 2, 3, 4) fmt.Printf("After append. slice2:%d
", slice2) //[0 0 0 1 2 3 4] // append , slice2_bak := append(slice2, 10, 11, 12) fmt.Printf("After append. slice2:%d slice2_bak:%d
", slice2, slice2_bak) //After append. slice2:[0 0 0 1 2 3 4] slice2_bak:[0 0 0 1 2 3 4 10 11 12] var slice3 = make([]int, len(slice2), cap(slice2)) copy(slice3, slice2) fmt.Printf("After copy slice. slice3:%d
", slice3) // , slice , copy var slice4 []int copy(slice4, slice2) fmt.Printf("After copy slice. slice4:%d
", slice4) //[] slice_append() print_end_seperator() } /** slice */ func slice_append() { // , slice cap 10 slice := make([]int, 5, 10) for i := 0; i < 5; i++ { slice[i] = i } slice1 := slice slice_p := &slice fmt.Printf("slice:%d slice1:%d slice_p:%d
", slice, slice1, *slice_p) fmt.Printf("slice's addr:%p
", &slice) // slice, slice cap 10, , , slice ,slice slice = append(slice, 10, 11, 12) fmt.Printf("After append. slice:%d slice1:%d slice_p:%d
", slice, slice1, *slice_p) fmt.Printf("After append, slice's addr:%p
", &slice) // , slice cap 6 slice2 := make([]int, 5, 6) for i := 0; i < 5; i++ { slice2[i] = i } slice3 := slice2 slice2_p := &slice2 fmt.Printf("slice2:%d slice3:%d slice2_p:%d
", slice2, slice3, *slice2_p) fmt.Printf("slice2's addr:%p
", &slice2) // slice, slice cap 6, , , , slice // slice , , fmt.Printf("slice.size:%d slice.cap:%d
", len(slice2), cap(slice2)) slice2 = append(slice2, 10, 11, 12, 13, 14, 15, 16, 17) fmt.Printf("After append. slice2:%d slice3:%d slice2_p:%d
", slice2, slice3, *slice2_p) fmt.Printf("After append, slice2's addr:%p
", &slice2) }