Original post

Here are the new codes for changing odd number to even (methodA) using AND NOT gates. I reconstructed methodC to match the new requirement.

My recommendation is still methodA because of that big.Int inaccuracy.

goos: linux
goarch: amd64
pkg: gosandbox
BenchmarkMethodA-8      20265528                57.2 ns/op
BenchmarkMethodC-8      56330416                20.8 ns/op
PASS
ok      gosandbox       2.414s
Code
package main

import (
	"fmt"
	"math/big"
)

const (
	shasum = "8c32eeb180c961c5015ed69a1579e6ad98479c9509e5c524f096cdda5e1cf73f"
)

func methodC(s *[]byte, capitalized bool) {
	if s == nil {
		return
	}

	index := len(*s) - 1
	x := &(*s)[index : index+1][0]

	// character recognitions
	switch *x {
	case 0x31, 0x33, 0x35, 0x37, 0x39, 0x42, 0x44, 0x46, 0x62, 0x64, 0x66:
		// 1 3 5 7 9 B D F b d f
		*x -= 0x01
	case 0x30, 0x32, 0x34, 0x36, 0x38, 0x41, 0x43, 0x45, 0x61, 0x63, 0x65:
		// 0 2 4 6 8 A C E a c e
		// do nothing
	default:
		return
	}
}

func methodA(x *big.Int) {
	x.AndNot(x, big.NewInt(1))
}

func main() {
	zz := new(big.Int)

	hash := []byte(shasum)
	zz.SetBytes(hash[:])
	fmt.Printf("BEFORE method A: %sn", zz.String())
	methodA(zz)
	fmt.Printf("AFTER method A : %sn", zz.String())

	hash = []byte(shasum)
	zz.SetBytes(hash[:])
	fmt.Printf("BEFORE method C: %sn", zz.String())
	fmt.Printf("DEBUG BEFORE method C: %sn", string(hash))
	methodC(&hash, false)
	zz.SetBytes(hash[:])
	fmt.Printf("DEBUG AFTER method C : %sn", string(hash))
	fmt.Printf("AFTER method C : %sn", zz.String())
}
// Output:
// BEFORE method A: 2953253003934257607559289743915026435532263105800530010414720734192461358425063874354789587599756988242021836199015574276107182587110732205759776721154918
// AFTER method A : 2953253003934257607559289743915026435532263105800530010414720734192461358425063874354789587599756988242021836199015574276107182587110732205759776721154918
// BEFORE method C: 2953253003934257607559289743915026435532263105800530010414720734192461358425063874354789587599756988242021836199015574276107182587110732205759776721154918
// DEBUG BEFORE method C: 8c32eeb180c961c5015ed69a1579e6ad98479c9509e5c524f096cdda5e1cf73f
// DEBUG AFTER method C : 8c32eeb180c961c5015ed69a1579e6ad98479c9509e5c524f096cdda5e1cf73e
// AFTER method C : 2953253003934257607559289743915026435532263105800530010414720734192461358425063874354789587599756988242021836199015574276107182587110732205759776721154917

Benchmark Codes
package main

import (
	"math/big"
	"testing"
)

func BenchmarkMethodA(b *testing.B) {
	tgt := new(big.Int)

	for i := 0; i < b.N; i++ {
		hash := []byte(shasum)
		tgt.SetBytes(hash[:])
		methodA(tgt)
	}
}

func BenchmarkMethodC(b *testing.B) {
	tgt := new(big.Int)

	for i := 0; i < b.N; i++ {
		hash := []byte(shasum)
		methodC(&hash, false)
		tgt.SetBytes(hash[:])
	}
}